<?php
/**COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOKIES
 * Returnerar XHTML-strängar och tar emot data från formulär hanterar funktionalitet för cookies
 */
class LoginView {
		
	

	private $checkBox = 'rememberMe';
	private $logout = 'logout';
	private $becomeMember = 'becomeMember';
	
	const PASSWORD = "password";
	const USERNAME = "username";
	const TRIED_TO_LOGIN = "triedtologin";
	
	public function LoginSuccess(){
		return "<p>Du loggades in</p>";
	}
	
	public function LogoutSuccess(){
	return "<p>Du loggades ut</p>";
	}
	
	//returns form as xhtml
	public function DoLoginForm() {
		return "<div id='formContainer'>
				<form action='' method='post'>
				    	<div><span class='regulartext'>Namn:</span><input type='text' name='".self::USERNAME."'/></div>
				    	<div><span class='regulartext'>Lösenord:</span><input type='password' name='".self::PASSWORD."'/></div>
				    	<label for='stayLoggedIn'><span class='regulartext'>Håll mig inloggad</span></label>
				    	<input type='checkbox' name='$this->checkBox' id='stayLoggedIn'/>
				    	<input type='submit' name='".self::TRIED_TO_LOGIN."' value='Logga in' />
		     		</form>
		     		".$this->DoBecomeMemberLink()."
		     		</div>";
	}

	//Returns log-out-button as xhtml
	public function DoLogoutBox() {
		return "\n<form action='?".NavigationView::CONTROLLER."=".NavigationView::LOGOUT_PAGE."' method='post'>
				<input type='submit' name='$this->logout' value='Logga ut'/>
			</form>";
	}
	
	//Makes link to become member form
	public function DoBecomeMemberLink (){
		return "
				<form action ='?".NavigationView::CONTROLLER."=".NavigationView::USER_VIEWS_BECOME_MEMBER."' method='post'> 
					<input type = 'submit' name = '' value = 'Bli medlem'/>
				</form>";
	} 

	//checks if rememberme-checkbox is checked
	public function IsCheckedBox() {
		if (isset($_GET[$this -> checkBox])) {
			return true;
		}
		return false;
	}

	//Has user tried to login?
	public function TriedToLogin() {
		if (isset($_POST[self::TRIED_TO_LOGIN])) {
			
			return true;
		} elseif (isset($_COOKIE[self::USERNAME]) && isset($_COOKIE[self::PASSWORD])) {
			return true;
		} else {
			return false;
		}
		return false;
	}

	//Has user tried to log out?
	public function TriedToLogout() {
		if (isset($_POST[$this -> logout])) {
			return true;
		}

		return false;
	}

	//gets username from form
	public function GetUserName() {
		if (isset($_POST[self::USERNAME])) {
			return $_POST[self::USERNAME];
		} elseif (isset($_COOKIE[self::USERNAME])) {
			return $_COOKIE[self::USERNAME];
		}

		return false;
	}

	//Gets password from form.
	public function GetPassword() {
		if (isset($_POST[self::PASSWORD])) {
			return $_POST[self::PASSWORD];
		} elseif (isset($_COOKIE[self::PASSWORD])) {
			return $_COOKIE[self::PASSWORD];
		}
		return false;
	}/*
	 * kommunikation m anv hamnar i vyn -- cookies Vill dölja att de finns i vyn, controllern vet inte om cookies för den är det bara två 
	 * olika sätt att skicka lösen/anvnamn.
	 */

	//Sets cookies if checkbox is checked. Updates cookies that are already set.
	public function SetCookieNSetLogoutState() {
		if (isset($_GET[$this -> checkBox])) {
			setcookie(self::USERNAME, $this -> GetUserName(), time() + 500);
			setcookie(self::PASSWORD, $this -> GetPassword(), time() + 500);
			return TRUE;
		} elseif (isset($_COOKIE[$this -> userName])) {
			setcookie(self::USERNAME, $_COOKIE[self::USERNAME], time() + 500);
			setcookie(self::PASSWORD, $_COOKIE[self::PASSWORD], time() + 500);
			return TRUE;
		}
		return FALSE;
	}

	//Remove cookies by giving them a time in the past.
	public function RemoveCookiesNSetLogoutState() {
		setcookie(self::USERNAME, "", time() - 3600);
		setcookie(self::PASSWORD, "", time() - 3600);

		unset($_COOKIE[self::USERNAME]);
		unset($_COOKIE[self::PASSWORD]);
		
		return true;
	}

	// returns xhtml that will create at errorbox when wrong passw/usernam is inserted
	public function ErrorMessageLog() {
		return "<div id='errorLogIn'>
	     <p><span>Ange dina uppgifter igen</span> </p>
	     <p>Det angivna användarnamnet eller lösenordet stämmer inte. Försök igen (kontrollera att inte Caps Lock är aktiverat).</p>
	     <p>Tänk till riktigt ordentligt nu!</p>
	     </div>";
	}
	
	// Returns xhtml for login/logoutbutton
	public function GetLoginOutButton ($bool){
		if($bool){
			return $this->DoLogoutBox() ."<a href='?".NavigationView::CONTROLLER."=".NavigationView::DELETE_MEMBER__CONTROLLER."'>Avregistrera dig</a>"; 
		}else{
			return "<a href='?".NavigationView::CONTROLLER."=".NavigationView::LOGIN_PAGE."' title='Logga in'>Logga in</a>";
		}
			
	}

	public function TestLoginView() {
		$lH = new LoginHandler;
		$text = "";
		$_GET[$this -> checkBox] = true;
		if (!$this -> IsCheckedBox()) {
			$text .= "<p>Checkboxen är markerad men isCheckedbox säger att den inte är det</p>";
		}

		$_GET[$this -> checkBox] = false;

		if ($this -> IsCheckedBox()) {
			$text .= "<p>Checkboxen är inte markerad men isCheckedbox säger att den är det</p>";
		}

		$_GET[$this -> login] = true;

		if (!$this -> TriedToLogin()) {
			$text .= "<p>TriedToLogin returnerar false fastän vi satt en session</p>";
		}

		$_GET[$this -> login] = false;

		$_COOKIE[$this -> userName] = "elin";
		$_COOKIE[$this -> password] = "elin";

		if (!$this -> TriedToLogin()) {
			$text .= "<p>Riktiga cookies är satta men tried to login returnerar ändå false</p>";
		}
		setcookie($this -> userName, "", time() - 86500);
		setcookie($this -> password, "", time() - 86500);

		$lH -> DoLogout();

		if ($this -> TriedToLogin()) {
			$text .= "<p>varken cookies eller indata finns men den returnerar ändå true</p>";
		}

		$_GET[$this -> userName] = "test";
		$_GET[$this -> password] = "test";

		if ($this -> GetUserName() != $_GET[$this -> userName]) {
			$text .= "<p>Användarnamnet som hämtas från GetUserName är inte samma som det som returneras </p>";
		}

		if ($this -> GetPassword() != $_GET[$this -> password]) {
			$text .= "<p>lösenordet som hämtas från GetPassord är inte samma som det som returneras </p>";
		}

		unset($_GET[$this -> userName]);
		unset($_GET[$this -> password]);

		if ($this -> GetUserName()) {
			$text .= "<p>Inget användnamn är satt ändå returneras true från getusername</p>";
		}

		if ($this -> GetPassword()) {
			$text .= "<p>Inget lösenord är satt ändå returneras true från getpassword</p>";
		}

		$lH -> DoLogout();

	}

}

//Don't have ? > if you accidentally have a space or tab after the end sign it will print on clientside. 
